package model.solicitud;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import dtos.SolicitudDTO;

import model.Cliente;

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="estaCotizada",
    			              discriminatorType=DiscriminatorType.STRING)
@Table(name="Solicitudes")
@DiscriminatorValue("NO_COTIZADA")
public class Solicitud {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int nro;
	
	@ManyToOne
	@JoinColumn(name="dniCliente")
	private Cliente cliente;
	
	private Date fecha;
	
	@OneToMany (cascade=CascadeType.ALL)
    @JoinColumn(name="idSolicitud")
	private Set<ItemSolicitud> items;
	
	public Solicitud()
	{
		items = new HashSet<ItemSolicitud>();
	}

	public Solicitud(int nro, Cliente cliente, Date fecha)
	{
		this.nro = nro;
		this.cliente = cliente;
		this.fecha = fecha;
		this.items = new HashSet<ItemSolicitud>();
	}
	
	public int getNro() {
		return nro;
	}

	public void setNro(int nro) {
		this.nro = nro;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public Set<ItemSolicitud> getItems() {
		return items;
	}

	public void setItems(Set<ItemSolicitud> items) {
		this.items = items;
	}
	
	public void addItem(ItemSolicitud item) {
		this.items.add(item);
	}
	
	public SolicitudDTO getView()
	{
		SolicitudDTO dto = new SolicitudDTO(this.nro, this.cliente.getView(), this.fecha);
		for(ItemSolicitud item : this.items)
		{
			dto.addItem(item.getView());
		}
		
		return dto;
	}
	
}
